﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdbool.h>

bool canWinNim(int n) {
    return n % 4 != 0;
}

int main() {
    // 精简测试用例
    struct TestCase {
        int n;
        bool expected;
    } testCases[] = {
        {1, true},   // 先手直接拿完
        {2, true},   // 先手拿1或2个
        {3, true},   // 先手拿1、2或3个
        {4, false},  // 4的倍数，先手必输
        {5, true},   // 先手拿1个，剩下4个给对手
        {8, false},  // 4的倍数
        {9, true},   // 先手拿1个，剩下8个给对手
        {12, false}, // 4的倍数
        {13, true},  // 先手拿1个，剩下12个给对手
        {16, false}, // 4的倍数
        {17, true}   // 先手拿1个，剩下16个给对手
    };

    int testCount = sizeof(testCases) / sizeof(testCases[0]);

    printf("Nim游戏测试结果:\n");
    printf("石头数量 | 期望结果 | 实际结果 | 状态\n");
    printf("--------|----------|----------|-----\n");

    for (int i = 0; i < testCount; i++) {
        bool result = canWinNim(testCases[i].n);
        printf("%-8d| %-9s| %-9s| %s\n",
            testCases[i].n,
            testCases[i].expected ? "true" : "false",
            result ? "true" : "false",
            result == testCases[i].expected ? "✓" : "✗");
    }

    return 0;
}